/**
 * @file wishlistSlice.js
 * @description 用户心愿单状态的 Redux slice。
 */
import { createSlice } from '@reduxjs/toolkit';
import toast from 'react-hot-toast';

// 尝试从 localStorage 获取初始心愿单状态
const getInitialWishlist = () => {
  try {
    // 每个用户的心愿单应该独立存储
    // 我们暂时简单处理，所有用户共享一个心愿单，或者需要结合用户ID
    // 为简单起见，暂时不区分用户，或者假定只有一个用户在使用心愿单
    // 更好的做法是： `localStorage.getItem(`wishlist_${userId}`);`
    const storedWishlist = localStorage.getItem('wishlistItems');
    return storedWishlist ? JSON.parse(storedWishlist) : [];
  } catch (error) {
    console.error("无法从localStorage解析心愿单数据:", error);
    return [];
  }
};

const initialState = {
  items: getInitialWishlist(), // 心愿单中的商品列表
};

const wishlistSlice = createSlice({
  name: 'wishlist',
  initialState,
  reducers: {
    /**
     * 添加商品到心愿单。
     * @param {object} state - 当前的 state。
     * @param {object} action - Redux action，action.payload 应该是要添加的商品对象。
     */
    addItemToWishlist: (state, action) => {
      const productToAdd = action.payload;
      const existingItem = state.items.find((item) => item.id === productToAdd.id);
      if (!existingItem) {
        state.items.push(productToAdd); // 心愿单通常不关心数量，只关心是否存在
        localStorage.setItem('wishlistItems', JSON.stringify(state.items));
        toast.success(`${productToAdd.title ? productToAdd.title.substring(0,20) : '商品'}... 已添加到心愿单!`);
      } else {
        toast.info(`${productToAdd.title ? productToAdd.title.substring(0,20) : '商品'}... 已在您的心愿单中。`);
      }
    },
    /**
     * 从心愿单移除商品。
     * @param {object} state - 当前的 state。
     * @param {object} action - Redux action，action.payload 应该是要移除的商品ID。
     */
    removeItemFromWishlist: (state, action) => {
      const productIdToRemove = action.payload; // payload 直接是 productId
      const itemIndex = state.items.findIndex(item => item.id === productIdToRemove);
      if (itemIndex !== -1) {
        const removedItemTitle = state.items[itemIndex].title;
        state.items.splice(itemIndex, 1);
        localStorage.setItem('wishlistItems', JSON.stringify(state.items));
        toast.success(`${removedItemTitle ? removedItemTitle.substring(0,20) : '商品'}... 已从心愿单移除。`);
      }
    },
    /**
     * 清空心愿单 (例如用户登出时，如果心愿单与用户关联)。
     * @param {object} state - 当前的 state。
     */
    clearWishlist: (state) => {
      state.items = [];
      localStorage.removeItem('wishlistItems'); // 或者根据用户ID移除
    }
  },
});

export const {
  addItemToWishlist,
  removeItemFromWishlist,
  clearWishlist
} = wishlistSlice.actions;

export default wishlistSlice.reducer;